﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Globalization;
using System.Windows.Forms;

namespace SistemaCenterQuimPost.Control
{
    public class ValidarDatos //Esta clase representa una validador de datos, recibe datos desde las propiedades Text de los TextBox y los valida según necesite.
    {

        public string validarLongitud(string unLabelControl, string unTexto, int unaLongitud) //evalua si el texto excede el máximo de longitud que puede soportar el campo en la BD.
        {
            if (unTexto.Length > unaLongitud)
            {
                return (unLabelControl + " la longitud de la cadena excede el máximo permitido = " + unaLongitud.ToString() + ".\n\n");
            }
            else
            {
                return "";
            }

        }

        public string validarCuit(string unLabelControl, string unTexto) //evalua si el texto corresponde con un cuit
        {
            if (!Regex.Match(unTexto, "^[0-9]{2}-[0-9]{8}-[0-9]$").Success)
            {

                return (unLabelControl + " el cuit debe tener este formato: 12-12345678-1.\n\n");
            }
            else
            {
                return "";
            }
            
        }

        public string validarMail(string unLabelControl, string unTexto) //evalua si el texto corresponde a un mail
        {
            if (!Regex.Match(unTexto, "^[a-zA-Z0-9_]+@[a-zA-Z]+.[a-zA-Z]+$").Success)
            {
                return (unLabelControl + " El e-mail debe tener este formato: algo@algomas.algoFinal\n\n");
            }
            else
            {
                return "";
            }
            
        }

        public string validarMoneda(string unLabelControl, string unTexto)
        {
            if (!Regex.Match(unTexto, @"^(0|[1-9][0-9]{0,8}|[1-9][0-9]{0,8},[0-9]{1,2}|0,[0-9]{1,2})$").Success)
            {
                return (unLabelControl + " El valor monetario debe ser entero o real con dos decimales.\n\n");
            }

            else
            {
                return "";
            }
           
        }

        public string validarEntero(string unLabelControl, string unTexto)
        {
            if (!Regex.Match(unTexto, "^(-?[1-9][0-9]*|0)$").Success)
            {
                return (unLabelControl + " El valor ingresado debe ser entero positivo o cero.\n\n");
            }
            else
            {
                return "";
            }

        }


        public string validarRealesPositvos(string unLabelControl, string unTexto)
        {
            if (!Regex.Match(unTexto, @"^(0|[1-9][0-9]{0,8}|[1-9][0-9]{0,8},[0-9]{1,2}|0,[0-9]{1,2})$").Success)
            {
                return (unLabelControl + " El valor ingresado debe ser positivo, entero o real.\n\n");
            }

            else
            {
                return "";
            }

        }

        public string validarRealesPositvosSinCero(string unLabelControl, string unTexto)
        {
            if (!Regex.Match(unTexto, @"^([1-9][0-9]{0,8}|[1-9][0-9]{0,8},[0-9]{1,2}|0,[0-9]{1,2})$").Success)
            {
                return (unLabelControl + " El valor ingresado debe ser positivo, entero o real.\n\n");
            }

            else
            {
                return "";
            }

        }
        
        public string validarNaturales(string unLabelControl, string unTexto)
        {
            if (!Regex.Match(unTexto, "^([1-9][0-9]*|0)$").Success)
            {
                return (unLabelControl + " El valor ingresado debe ser positivo entero.\n\n");
            }
            else
            {
                return "";
            }

        }

        public string ValidarNaturalesPositivos (string unLabelControl, string unTexto)
        {
            if (!Regex.Match(unTexto, "^[1-9][0-9]*$").Success)
            {
                return (unLabelControl + " El valor ingresado debe ser entero mayor a cero.\n\n");
            }
            else
            {
                return "";
            }
        }

        public string validarDni(string unLabelControl, string unTexto)
        {
            if (!Regex.Match(unTexto, "^[0-9]{8,9}$").Success)
            {
                return (unLabelControl + " El DNI puede entre 8 y 9 dígitos numéricos.\n\n");
            }
            else
            {
                return "";
            }

        }

        public string validarPorcentaje(string unLabelControl, string unTexto)
        {
            if (!Regex.Match(unTexto, "^(0|[1-9][0-9]?|100)$").Success)
            {
                return (unLabelControl + " El valor procentual debe ser un valor de 0 a 100.\n\n");
            }
            else
            {
                return "";
            }

        }

        public string verificarFechaSistema()  //método que verifica que la fecha del SO sea válida para el sistema CenterQuim
        {
            try 
	        {	        
		        DataSet2 centerQuimDs = new DataSet2(); // variables que me permiten acceder a la base de dato caja.

                DataSet2TableAdapters.CajasTableAdapter cajasTa = new DataSet2TableAdapters.CajasTableAdapter();


                int ultimaCaja = 0;

                ultimaCaja = Convert.ToInt32(cajasTa.ScalarQueryCaja()); //busca la ultima caja si hay registros.
            
                cajasTa.FillByNroCaja(centerQuimDs.Cajas, ultimaCaja); //busca todos los datos de la ultima caja

            
            
                DateTime fechaDeUltimaCaja = (DateTime)centerQuimDs.Cajas[0].fechaCaja; //almacenamos la fecha del último registro de caja

                DateTime fechaSistemaSO = (DateTime.Now); //almacenamos la fecha actual del SO.

                
                //usando el método Compare DateTime (-1,0,1) comparamos las fechas.
            
                if ((DateTime.Compare(fechaSistemaSO,fechaDeUltimaCaja) >= 0)){

                    return fechaSistemaSO.ToString("d");

                }else

                {
                    return "";  //si la fecha del SO es menor a fecha del ultimo registro de caja (en caso que exista) devuelve vacio para que informe error.
                
                }

            }

            catch (IndexOutOfRangeException)
            {
                return DateTime.Now.ToString("d"); //si lanza una excepción es porque no existían registros de Caja. En este caso se coloca como fecha del sistema la del SO.
            }

            catch (Exception ex)
            {
                //Por cualquier otra excepcion se informa el error, en este caso es un error grave.
                MessageBox.Show("La conexión a la base de datos no fué exitosa.\n\n Comuniquese con su desarrollador para solucionar el problema.\n\n" + ex.Message, "ERROR GRAVE - ACCESO A BASE DE DATO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
                return "";
            }
            
        }

    }
}
